home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / linux / pkt_cls.h < prev    next >
C/C++ Source or Header  |  2005-10-13  |  7KB  |  323 lines

  1. #ifndef __LINUX_PKT_CLS_H
  2. #define __LINUX_PKT_CLS_H
  3.  
  4. #include <linux/pkt_sched.h>
  5.  
  6. /* I think i could have done better macros ; for now this is stolen from
  7.  * some arch/mips code - jhs
  8. */
  9. #define _TC_MAKE32(x) ((x))
  10.  
  11. #define _TC_MAKEMASK1(n) (_TC_MAKE32(1) << _TC_MAKE32(n))
  12. #define _TC_MAKEMASK(v,n) (_TC_MAKE32((_TC_MAKE32(1)<<(v))-1) << _TC_MAKE32(n))
  13. #define _TC_MAKEVALUE(v,n) (_TC_MAKE32(v) << _TC_MAKE32(n))
  14. #define _TC_GETVALUE(v,n,m) ((_TC_MAKE32(v) & _TC_MAKE32(m)) >> _TC_MAKE32(n))
  15.  
  16. /* verdict bit breakdown 
  17.  *
  18. bit 0: when set -> this packet has been munged already
  19.  
  20. bit 1: when set -> It is ok to munge this packet
  21.  
  22. bit 2,3,4,5: Reclassify counter - sort of reverse TTL - if exceeded
  23. assume loop
  24.  
  25. bit 6,7: Where this packet was last seen 
  26. 0: Above the transmit example at the socket level
  27. 1: on the Ingress
  28. 2: on the Egress
  29.  
  30. bit 8: when set --> Request not to classify on ingress. 
  31.  
  32. bits 9,10,11: redirect counter -  redirect TTL. Loop avoidance
  33.  
  34.  *
  35.  * */
  36.  
  37. #define TC_MUNGED          _TC_MAKEMASK1(0)
  38. #define SET_TC_MUNGED(v)   ( TC_MUNGED | (v & ~TC_MUNGED))
  39. #define CLR_TC_MUNGED(v)   ( v & ~TC_MUNGED)
  40.  
  41. #define TC_OK2MUNGE        _TC_MAKEMASK1(1)
  42. #define SET_TC_OK2MUNGE(v)   ( TC_OK2MUNGE | (v & ~TC_OK2MUNGE))
  43. #define CLR_TC_OK2MUNGE(v)   ( v & ~TC_OK2MUNGE)
  44.  
  45. #define S_TC_VERD          _TC_MAKE32(2)
  46. #define M_TC_VERD          _TC_MAKEMASK(4,S_TC_VERD)
  47. #define G_TC_VERD(x)       _TC_GETVALUE(x,S_TC_VERD,M_TC_VERD)
  48. #define V_TC_VERD(x)       _TC_MAKEVALUE(x,S_TC_VERD)
  49. #define SET_TC_VERD(v,n)   ((V_TC_VERD(n)) | (v & ~M_TC_VERD))
  50.  
  51. #define S_TC_FROM          _TC_MAKE32(6)
  52. #define M_TC_FROM          _TC_MAKEMASK(2,S_TC_FROM)
  53. #define G_TC_FROM(x)       _TC_GETVALUE(x,S_TC_FROM,M_TC_FROM)
  54. #define V_TC_FROM(x)       _TC_MAKEVALUE(x,S_TC_FROM)
  55. #define SET_TC_FROM(v,n)   ((V_TC_FROM(n)) | (v & ~M_TC_FROM))
  56. #define AT_STACK    0x0
  57. #define AT_INGRESS    0x1
  58. #define AT_EGRESS    0x2
  59.  
  60. #define TC_NCLS          _TC_MAKEMASK1(8)
  61. #define SET_TC_NCLS(v)   ( TC_NCLS | (v & ~TC_NCLS))
  62. #define CLR_TC_NCLS(v)   ( v & ~TC_NCLS)
  63.  
  64. #define S_TC_RTTL          _TC_MAKE32(9)
  65. #define M_TC_RTTL          _TC_MAKEMASK(3,S_TC_RTTL)
  66. #define G_TC_RTTL(x)       _TC_GETVALUE(x,S_TC_RTTL,M_TC_RTTL)
  67. #define V_TC_RTTL(x)       _TC_MAKEVALUE(x,S_TC_RTTL)
  68. #define SET_TC_RTTL(v,n)   ((V_TC_RTTL(n)) | (v & ~M_TC_RTTL))
  69.  
  70. #define S_TC_AT          _TC_MAKE32(12)
  71. #define M_TC_AT          _TC_MAKEMASK(2,S_TC_AT)
  72. #define G_TC_AT(x)       _TC_GETVALUE(x,S_TC_AT,M_TC_AT)
  73. #define V_TC_AT(x)       _TC_MAKEVALUE(x,S_TC_AT)
  74. #define SET_TC_AT(v,n)   ((V_TC_AT(n)) | (v & ~M_TC_AT))
  75.  
  76. /* Action attributes */
  77. enum
  78. {
  79.     TCA_ACT_UNSPEC,
  80.     TCA_ACT_KIND,
  81.     TCA_ACT_OPTIONS,
  82.     TCA_ACT_INDEX,
  83.     __TCA_ACT_MAX
  84. };
  85.  
  86. #define TCA_ACT_MAX __TCA_ACT_MAX
  87. #define TCA_OLD_COMPAT (TCA_ACT_MAX+1)
  88. #define TCA_ACT_MAX_PRIO 32
  89. #define TCA_ACT_BIND    1
  90. #define TCA_ACT_NOBIND    0
  91. #define TCA_ACT_UNBIND    1
  92. #define TCA_ACT_NOUNBIND    0
  93. #define TCA_ACT_REPLACE        1
  94. #define TCA_ACT_NOREPLACE    0
  95. #define MAX_REC_LOOP 4
  96. #define MAX_RED_LOOP 4
  97.  
  98. #define TC_ACT_UNSPEC    (-1)
  99. #define TC_ACT_OK        0
  100. #define TC_ACT_RECLASSIFY    1
  101. #define TC_ACT_SHOT        2
  102. #define TC_ACT_PIPE        3
  103. #define TC_ACT_STOLEN        4
  104. #define TC_ACT_QUEUED        5
  105. #define TC_ACT_REPEAT        6
  106. #define TC_ACT_JUMP        0x10000000
  107.  
  108. /* Action type identifiers*/
  109. enum
  110. {
  111.     TCA_ID_UNSPEC=0,
  112.     TCA_ID_POLICE=1,
  113.     /* other actions go here */
  114.     __TCA_ID_MAX=255
  115. };
  116.  
  117. #define TCA_ID_MAX __TCA_ID_MAX
  118.  
  119. struct tc_police
  120. {
  121.     __u32            index;
  122.     int            action;
  123. #define TC_POLICE_UNSPEC    TC_ACT_UNSPEC
  124. #define TC_POLICE_OK        TC_ACT_OK
  125. #define TC_POLICE_RECLASSIFY    TC_ACT_RECLASSIFY
  126. #define TC_POLICE_SHOT        TC_ACT_SHOT
  127. #define TC_POLICE_PIPE        TC_ACT_PIPE
  128.  
  129.     __u32            limit;
  130.     __u32            burst;
  131.     __u32            mtu;
  132.     struct tc_ratespec    rate;
  133.     struct tc_ratespec    peakrate;
  134.     int             refcnt;
  135.     int             bindcnt;
  136.     __u32            capab;
  137. };
  138.  
  139. struct tcf_t
  140. {
  141.     __u64   install;
  142.     __u64   lastuse;
  143.     __u64   expires;
  144. };
  145.  
  146. struct tc_cnt
  147. {
  148.     int                   refcnt; 
  149.     int                   bindcnt;
  150. };
  151.  
  152. #define tc_gen \
  153.     __u32                 index; \
  154.     __u32                 capab; \
  155.     int                   action; \
  156.     int                   refcnt; \
  157.     int                   bindcnt
  158.  
  159. enum
  160. {
  161.     TCA_POLICE_UNSPEC,
  162.     TCA_POLICE_TBF,
  163.     TCA_POLICE_RATE,
  164.     TCA_POLICE_PEAKRATE,
  165.     TCA_POLICE_AVRATE,
  166.     TCA_POLICE_RESULT,
  167.     __TCA_POLICE_MAX
  168. #define TCA_POLICE_RESULT TCA_POLICE_RESULT
  169. };
  170.  
  171. #define TCA_POLICE_MAX (__TCA_POLICE_MAX - 1)
  172.  
  173. /* U32 filters */
  174.  
  175. #define TC_U32_HTID(h) ((h)&0xFFF00000)
  176. #define TC_U32_USERHTID(h) (TC_U32_HTID(h)>>20)
  177. #define TC_U32_HASH(h) (((h)>>12)&0xFF)
  178. #define TC_U32_NODE(h) ((h)&0xFFF)
  179. #define TC_U32_KEY(h) ((h)&0xFFFFF)
  180. #define TC_U32_UNSPEC    0
  181. #define TC_U32_ROOT    (0xFFF00000)
  182.  
  183. enum
  184. {
  185.     TCA_U32_UNSPEC,
  186.     TCA_U32_CLASSID,
  187.     TCA_U32_HASH,
  188.     TCA_U32_LINK,
  189.     TCA_U32_DIVISOR,
  190.     TCA_U32_SEL,
  191.     TCA_U32_POLICE,
  192.     TCA_U32_ACT,   
  193.     TCA_U32_INDEV,
  194.     TCA_U32_PCNT,
  195.     TCA_U32_MARK,
  196.     __TCA_U32_MAX
  197. };
  198.  
  199. #define TCA_U32_MAX (__TCA_U32_MAX - 1)
  200.  
  201. struct tc_u32_key
  202. {
  203.     __u32        mask;
  204.     __u32        val;
  205.     int        off;
  206.     int        offmask;
  207. };
  208.  
  209. struct tc_u32_sel
  210. {
  211.     unsigned char        flags;
  212.     unsigned char        offshift;
  213.     unsigned char        nkeys;
  214.  
  215.     __u16            offmask;
  216.     __u16            off;
  217.     short            offoff;
  218.  
  219.     short            hoff;
  220.     __u32            hmask;
  221.     struct tc_u32_key    keys[0];
  222. };
  223.  
  224. #ifdef CONFIG_CLS_U32_PERF
  225. struct tc_u32_pcnt
  226. {
  227.     __u64 rcnt;
  228.     __u64 rhit;
  229.     __u64 kcnts[0];
  230. };
  231. #endif
  232. /* Flags */
  233.  
  234. #define TC_U32_TERMINAL        1
  235. #define TC_U32_OFFSET        2
  236. #define TC_U32_VAROFFSET    4
  237. #define TC_U32_EAT        8
  238.  
  239. #define TC_U32_MAXDEPTH 8
  240.  
  241.  
  242. /* RSVP filter */
  243.  
  244. enum
  245. {
  246.     TCA_RSVP_UNSPEC,
  247.     TCA_RSVP_CLASSID,
  248.     TCA_RSVP_DST,
  249.     TCA_RSVP_SRC,
  250.     TCA_RSVP_PINFO,
  251.     TCA_RSVP_POLICE,
  252.     TCA_RSVP_ACT,
  253.     __TCA_RSVP_MAX
  254. };
  255.  
  256. #define TCA_RSVP_MAX (__TCA_RSVP_MAX - 1 )
  257.  
  258. struct tc_rsvp_gpi
  259. {
  260.     __u32    key;
  261.     __u32    mask;
  262.     int    offset;
  263. };
  264.  
  265. struct tc_rsvp_pinfo
  266. {
  267.     struct tc_rsvp_gpi dpi;
  268.     struct tc_rsvp_gpi spi;
  269.     __u8    protocol;
  270.     __u8    tunnelid;
  271.     __u8    tunnelhdr;
  272. };
  273.  
  274. /* ROUTE filter */
  275.  
  276. enum
  277. {
  278.     TCA_ROUTE4_UNSPEC,
  279.     TCA_ROUTE4_CLASSID,
  280.     TCA_ROUTE4_TO,
  281.     TCA_ROUTE4_FROM,
  282.     TCA_ROUTE4_IIF,
  283.     TCA_ROUTE4_POLICE,
  284.     TCA_ROUTE4_ACT,
  285.     __TCA_ROUTE4_MAX
  286. };
  287.  
  288. #define TCA_ROUTE4_MAX (__TCA_ROUTE4_MAX - 1)
  289.  
  290.  
  291. /* FW filter */
  292.  
  293. enum
  294. {
  295.     TCA_FW_UNSPEC,
  296.     TCA_FW_CLASSID,
  297.     TCA_FW_POLICE,
  298.     TCA_FW_INDEV, /*  used by CONFIG_NET_CLS_IND */
  299.     TCA_FW_ACT, /* used by CONFIG_NET_CLS_ACT */
  300.     __TCA_FW_MAX
  301. };
  302.  
  303. #define TCA_FW_MAX (__TCA_FW_MAX - 1)
  304.  
  305. /* TC index filter */
  306.  
  307. enum
  308. {
  309.     TCA_TCINDEX_UNSPEC,
  310.     TCA_TCINDEX_HASH,
  311.     TCA_TCINDEX_MASK,
  312.     TCA_TCINDEX_SHIFT,
  313.     TCA_TCINDEX_FALL_THROUGH,
  314.     TCA_TCINDEX_CLASSID,
  315.     TCA_TCINDEX_POLICE,
  316.     TCA_TCINDEX_ACT,
  317.     __TCA_TCINDEX_MAX
  318. };
  319.  
  320. #define TCA_TCINDEX_MAX     (__TCA_TCINDEX_MAX - 1)
  321.  
  322. #endif
  323.